﻿using System;
using System.Drawing;
using System.Collections;
using System.Linq;
using System.Text;
using ZedGraph;

namespace ABM_De_Empleados
{
	class Grafico_redondo : ZedGraphControl
	{
		/*
		 * Propiedades
		 */

		public RectangleF area
		{
			get;
			set;
		}

		public PieItem fragmento_del_grafico
		{
			get;
			set;
		}

		public int cantidad_de_empleados_almacenados
		{
			get;
			set;
		}

		// Lo siguiente representa cada nombre de los empleados que se listarán.
		private String[] nombres_de_los_empleados;

		// El siguiente representa al color que cada empleado tendrá en el gráfico.
		private System.Drawing.Color[] color_de_cada_empleado;

		// Representa al sumatorio de ausencias.
		private int[] datos_de_ausencias_de_los_empleados;

		/*
		 * Constructor
		 */

		public Grafico_redondo ()
		{
			// Instancia algunas propiedades.
			nombres_de_los_empleados = new String[5];
			color_de_cada_empleado = new Color[5];
			datos_de_ausencias_de_los_empleados = new int[5];

			area = new RectangleF ();

			// Primero ajusta las propiedades que respectan al título del gráfico.
			GraphPane.Title.Text = "Cinco empleados que más faltaron desde su alta";
			GraphPane.Title.FontSpec.IsItalic = true;
			GraphPane.Title.FontSpec.Size = 30;
			GraphPane.Title.FontSpec.Family = "Times New Roman";
			GraphPane.Rect = new RectangleF (0, 0, 500, 300);

			// Luego, ajusta las propiedades correspondientes a la leyenda (cuadro que se muestra como color-empleado).
			GraphPane.Legend.Position = LegendPos.Float;
			GraphPane.Legend.Location = new Location (0.99, 0.2, CoordType.PaneFraction, AlignH.Right, AlignV.Top);
			GraphPane.Legend.FontSpec.Size = 15;
			GraphPane.Legend.IsHStack = false;

			// Inicializa el vector de colores de cada empleado.
			color_de_cada_empleado[0] = Color.Red;
			color_de_cada_empleado[1] = Color.Blue;
			color_de_cada_empleado[2] = Color.Gold;
			color_de_cada_empleado[3] = Color.DarkOrange;
			color_de_cada_empleado[4] = Color.Green;

			// Por defecto, la cantidad de empleados es 0.
			cantidad_de_empleados_almacenados = 0;

			// Le agrega un color de fondo
			GraphPane.Chart.Fill = new Fill (Color.Green, Color.FromArgb (255, 255, 166), 90F);
			GraphPane.Fill = new Fill (Color.FromArgb (250, 250, 255));

			// Oculta los ejes
			GraphPane.XAxis.IsVisible = false;
			GraphPane.YAxis.IsVisible = false;

			// Establece propiedades y luego agrega el control al formulario.
			Location = new System.Drawing.Point (210, 140);
			Name = "grafico_de_circulo";
			ScrollGrace = 0D;
			ScrollMaxX = 0D;
			ScrollMaxY = 0D;
			ScrollMaxY2 = 0D;
			ScrollMinX = 0D;
			ScrollMinY = 0D;
			ScrollMinY2 = 0D;
			Size = new System.Drawing.Size (600, 300);
			TabIndex = 4;
			Visible = true;

		}

		/*
		 * Métodos
		 */

		public void limpiar_grafico (String titulo)
		{
			// Esto se debe realizar siempre al comienzo de la graficación. Limpia datos de pedidos anteriores.
			cantidad_de_empleados_almacenados = 0;
			//fragmento_del_grafico.Clear ();
			
			area = this.GraphPane.Rect;
			this.GraphPane = new GraphPane (area, titulo, "a", "b");

			// Le agrega un color de fondo
			GraphPane.Chart.Fill = new Fill (Color.Green, Color.FromArgb (255, 255, 166), 90F);
			GraphPane.Fill = new Fill (Color.FromArgb (250, 250, 255));

			// Oculta los ejes
			GraphPane.XAxis.IsVisible = false;
			GraphPane.YAxis.IsVisible = false;

			// Ajusta las propiedades que respectan al título del gráfico.
			GraphPane.Title.FontSpec.IsItalic = true;
			GraphPane.Title.FontSpec.Size = 30;
			GraphPane.Title.FontSpec.Family = "Times New Roman";

			// Luego, ajusta las propiedades correspondientes a la leyenda (cuadro que se muestra como color-empleado).
			GraphPane.Legend.Position = LegendPos.Float;
			GraphPane.Legend.Location = new Location (0.99, 0.2, CoordType.PaneFraction, AlignH.Right, AlignV.Top);
			GraphPane.Legend.FontSpec.Size = 15;
			GraphPane.Legend.IsHStack = false;
		}

		public void refrescar_grafico ()
		{
			this.AxisChange ();
			this.Refresh ();
		}

		public void agregar_dato (string nombre_del_empleado, int suma_de_ausencias)
		{
			this.nombres_de_los_empleados[cantidad_de_empleados_almacenados] = nombre_del_empleado;
			this.datos_de_ausencias_de_los_empleados[cantidad_de_empleados_almacenados] = suma_de_ausencias;

			cantidad_de_empleados_almacenados++;
		}

		// Al finalizar la toma de datos, se genera el gráfico circular.
		public void agregar_todas_las_divisiones_al_grafico ()
		{
			for (int i = 0; i < cantidad_de_empleados_almacenados; i++)
			{
				// agrega datos y genera la división.
				fragmento_del_grafico = GraphPane.AddPieSlice (datos_de_ausencias_de_los_empleados[i], color_de_cada_empleado[i], Color.White, 45, 0, nombres_de_los_empleados[i]);

				// ajusta el texto asociado a la división.
				fragmento_del_grafico.LabelDetail.FontSpec.FontColor = Color.Black;
				fragmento_del_grafico.LabelDetail.FontSpec.Size = 12;

				fragmento_del_grafico.Label.Text += " (";
				fragmento_del_grafico.Label.Text += datos_de_ausencias_de_los_empleados[i].ToString ();
				fragmento_del_grafico.Label.Text += ")";
			}
		}

	}
}